/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package controladores;

import java.util.List;
import subSetor.CadastroSubSetor;
import subSetor.RepositorioSubSetor;
import subSetor.SubSetor;
import subSetor.SubSetorNaoCadastradoException;
import util.CamposObrigatoriosException;
import util.ErroAcessoRepositorioException;

/**
 *
 * @author PauloM
 */
public class ControladorSubSetor {

 private RepositorioSubSetor objRepositorioSubSetor = null;

    public ControladorSubSetor(RepositorioSubSetor objRepositorioSubSetor) {
        this.objRepositorioSubSetor = objRepositorioSubSetor;
    }

    /**
     *
     * @param objRepositorioSubSetor
     * @throws ErroAcessoRepositorioException
     */

    public void Cadastrar(SubSetor objSubSetor) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroSubSetor objCadastroSubSetor = new CadastroSubSetor(this.objRepositorioSubSetor);

        if (objSubSetor.getDescricaoSubSetor().trim().length() == 0)
            throw new CamposObrigatoriosException("Descrição SubSetor Não informada");

        // Salvando no banco
        objCadastroSubSetor.cadastrarAtualizar(objSubSetor);
    }

    /**
     * Metodo que ira cadastrar o SubSetor
     *
     * @param SubSetor objSubSetor
     * @return void
     */

    public void Atualizar(SubSetor objSubSetor) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroSubSetor objCadastroSubSetor = new CadastroSubSetor(this.objRepositorioSubSetor);


        // Casts Necessários
        int idSubSetor = (int) objSubSetor.getIdSubSetor();
        boolean statusSubSetor = (boolean) objSubSetor.getStatusSubSetor();

        // Validações
        if (objSubSetor.getDescricaoSubSetor().trim().length() == 0)
            throw new CamposObrigatoriosException("Descrição SubSetor Não informada");

        if(idSubSetor == 0)
            throw new CamposObrigatoriosException("Identificador SubSetor Não informada");

        // Setando novamente os valores
        objSubSetor.setStatusSubSetor(statusSubSetor);

        // Salvando no banco
        objCadastroSubSetor.cadastrarAtualizar(objSubSetor);

    }

    /**
     * Metodo que ira produrar o SubSetor
     *
     * @param int idSubSetor
     * @return void
     */

    public SubSetor procurar(int idSubSetor) throws SubSetorNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroSubSetor objCadastroSubSetor = new CadastroSubSetor(this.objRepositorioSubSetor);

        // Realizando casts
       idSubSetor = (int) idSubSetor;
       // validando
        if(idSubSetor == 0) throw new CamposObrigatoriosException("Codigo SubSetor já existe.");

        // Salvando no banco
        return objCadastroSubSetor.procurar(idSubSetor);

    }

    /**
     * Metodo que ira verificar a existência do SubSetor
     *
     * @param int idSubSetor
     * @return void
     */

    public boolean existe(int idSubSetor) throws ErroAcessoRepositorioException, CamposObrigatoriosException {
        CadastroSubSetor objCadastroSubSetor = new CadastroSubSetor(this.objRepositorioSubSetor);

       // Realizando casts
       idSubSetor = (int) idSubSetor;
       // validando
        if(idSubSetor == 0) throw new CamposObrigatoriosException("Codigo SubSetor já existe.");

        // Salvando no banco
         return objCadastroSubSetor.existe(idSubSetor);
    }

    /**
     * Metodo que ira listar os SubSetors
     *
     * @return Collection
     */
    public List<SubSetor> listar(String strComplemento) throws Exception, ErroAcessoRepositorioException, CamposObrigatoriosException {
       CadastroSubSetor objCadastroSubSetor = new   CadastroSubSetor(this.objRepositorioSubSetor);

       return objCadastroSubSetor.listar(strComplemento);
    }

    /**
     * Método que ira remover o SubSetor do banco
     *
     * @param idSubSetor
     */
    public void remover(int idSubSetor) throws SubSetorNaoCadastradoException, ErroAcessoRepositorioException, CamposObrigatoriosException {
       CadastroSubSetor objCadastroSubSetor = new CadastroSubSetor(objRepositorioSubSetor);

       // Realizando casts
       idSubSetor = (int) idSubSetor;
       // validando
        if(idSubSetor == 0) throw new CamposObrigatoriosException("Codigo SubSetor já existe.");

       objCadastroSubSetor.remover(idSubSetor);
    }
    
    /**
     * Metodo que ira listar o SubSetor
     *
     * @return Collection
     */
    public List<SubSetor> listarAtivos() throws Exception, ErroAcessoRepositorioException {
       CadastroSubSetor objCadastroSubSetor = new   CadastroSubSetor(this.objRepositorioSubSetor);

       return objCadastroSubSetor.listarAtivos();
    }
    
    /**
     * Metodo que ira listar os Categorias
     *
     * @return Collection
     */
    public List<SubSetor> procurarPorDescricaoPorSetor(String descricaoSubSetor, int idSetor) throws Exception, ErroAcessoRepositorioException {
       CadastroSubSetor objCadastroSubSetor = new   CadastroSubSetor(this.objRepositorioSubSetor);

       if(descricaoSubSetor.trim().length() == 0 && idSetor == 0) throw new CamposObrigatoriosException("Descrição Sub Setor ou Setor")       ;
       return objCadastroSubSetor.procurarPorDescricaoPorSetor(descricaoSubSetor, idSetor);
    }
}